home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gekkan Dennou Club 140
/
Gekkan Dennou Club - 2000.1 Vol. 140 (Japan).7z
/
Gekkan Dennou Club - 2000.1 Vol. 140 (Japan) (Track 1).bin
/
tools
/
dshell
/
dsh333bs.lzh
/
realtime.c
< prev
next >
Wrap
C/C++ Source or Header
|
1999-07-11
|
2KB
|
109 lines
/*
dshell v3
ファイル位置表示スケール直接操作
*/
#include "dsh.h"
int
Realtime_Scroll()
{
int lp0, olp;
int dmx, dmy, mx, my, mbl, mbr;
int omx, omy;
int start_pos = (RW_FULL-Rwin_len)/2;
if (start_pos) {
const char bar_pat[] = "□"; /* 何文字(バイト)でもよい! */
char bar[98];
{
int i;
bar[0] = '\0';
for (i = 0; i < 96 / (sizeof(bar_pat) - 1); i++) { /* パターン生成 */
strcat(bar, bar_pat);
}
}
B_LOCATE(0, start_pos);
B_PRINT((uchar *) bar);
B_LOCATE(0, start_pos + Rwin_len + 1);
B_PRINT((uchar *) bar);
if (!GMODE) {
fill(0, 16, 768, (start_pos) * 16, 2);
fill(0, (start_pos + Rwin_len + 2) * 16, 768, 496, 2);
}
}
omx = omy = olp = -1;
lp0 = lp;
do {
dmspos(&mx, &my);
dmsstat(&dmx, &dmy, &mbl, &mbr);
if (496 <= my) { /* マウス座標の読み込み */
lp = (mx - 528) * lpmx / 112 - (Rwin_len / 2);
if (lp < 0) {
lp = 0;
}
if (lp > lpmx - Rwin_len) {
lp = lpmx - Rwin_len;
}
} else {
lp = lp0;
}
if (olp != lp) {/* 座標が更新されていたら画面も更新する */
int i;
for (i = start_pos; i < (start_pos + Rwin_len); i++) {
p_lin(lp + i - start_pos, i);
}
}
if (omx != mx || olp != lp) {
p_fpt(2);
}
p_time(0);
omx = mx;
omy = my;
olp = lp;
} while (mbl || mbr);
lp -= start_pos;
if (lp < 0) { /* 上方向補正 */
lp = 0;
}
if (lp > lpmx - 30) { /* 下方向補正 */
lp = lpmx - 30;
}
if (start_pos) { /* バックスクリーンの復帰(真ん中からぼぉわぁ~っと) */
int i;
for (i = 0; i < 15; i++) {
if (!GMODE) {
fill(0, (15 - i) * 16, 768, (16 - i) * 16, 0);
}
p_lin(lp + (14 - i), (14 - i));
if (!GMODE) {
fill(0, (16 + i) * 16, 768, (17 + i) * 16, 0);
}
p_lin(lp + (15 + i), (15 + i));
}
}
p_fpt(1);
return(lp);
}